home *** CD-ROM | disk | FTP | other *** search
- program TstFib;
-
- {$apptype console}
-
- uses
- Windows, SysUtils, Classes;
-
- var
- FibCache : TList;
-
- function SlowFibonacci(N : integer) : integer;
- begin
- if (N <= 2) then
- Result := 1
- else
- Result := SlowFibonacci(N-2) + SlowFibonacci(N-1);
- end;
-
- procedure PrepareFibCache;
- var
- i : integer;
- begin
- FibCache := TList.Create;
- FibCache.Count := 1001;
- FibCache[1] := pointer(1);
- FibCache[2] := pointer(1);
- for i := 3 to 1000 do
- FibCache[i] := pointer(-1);
- end;
-
- function FastFibonacci(N : integer) : integer;
- begin
- Result := integer(FibCache[N]);
- if (Result = -1) then begin
- Result := FastFibonacci(N-2) + FastFibonacci(N-1);
- FibCache[N] := pointer(Result);
- end;
- end;
-
- var
- i : integer;
- StartTime : DWORD;
- begin
- PrepareFibCache;
-
- (*
- for i := 1 to 10 do
- writeln(i:5, SlowFibonacci(i):10);
-
- for i := 1 to 10 do
- writeln(i:5, FastFibonacci(i):10);
- *)
-
- writeln('calculating 40th Fibonacci number (fast)...');
- StartTime := GetTickCount;
- i := FastFibonacci(40);
- writeln('fast: ', i:10, ' time: ', GetTickCount - StartTime);
-
- writeln('calculating 40th Fibonacci number (slow)...');
- StartTime := GetTickCount;
- i := SlowFibonacci(40);
- writeln('slow: ', i:10, ' time: ', GetTickCount - StartTime);
-
- writeln('Done, prees enter...');
- readln;
- end.
-